home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / PCL4C33.ARJ / MODEM_IO.C < prev    next >
Text File  |  1992-08-01  |  3KB  |  105 lines

  1. /*** MODEM_IO.C ***/
  2.  
  3. #include <stdio.h>
  4. #include "pcl4c.h"
  5. #include "ascii.h"
  6.  
  7. #define FALSE 0
  8. #define TRUE !FALSE
  9. #define SECONDS 18
  10.  
  11. /*** send string to modem & get echo ***/
  12.  
  13. int SendTo(Port,String)
  14. int Port;       /* port to talk to */
  15. char *String;   /* string to send to mdoem */
  16. {int i;
  17.  char c;
  18.  int Code;
  19.  SioRxFlush(Port);
  20.  SioDelay(SECONDS/4);
  21.  for(i=0;i<strlen(String);i++)
  22.     {/* User BREAK ? */
  23.      if(BreakTest()) return(FALSE);
  24.      /* fetch character */
  25.      c = toupper( String[i] );
  26.      switch(c)
  27.         {case '!':
  28.             /* replace ! with carriage return */
  29.             c = CR;
  30.             break;
  31.          case '~':
  32.             /* delay 1/2 second */
  33.             SioDelay(SECONDS/2);
  34.             c = ' ';
  35.             break;
  36.          case ' ':
  37.             /* delay 1/4 second */
  38.             SioDelay(SECONDS/4);
  39.             break;
  40.         } /* end switch */
  41.      /* transmit as 7 bit character */
  42.      PutChar(Port,(char)(0x7f & c));
  43.      /* delay 3/18th of a second */
  44.      SioDelay(3);
  45.      /* wait up to 1 second for the echo */
  46.      Code = GetChar(Port,SECONDS);
  47.      if(Code>0) SioCrtWrite((char)Code);
  48.     }
  49.  return(TRUE);
  50. } /* end SendTo */
  51.  
  52. /*** wait for incoming string from modem ***/
  53.  
  54. int WaitFor(Port,String)
  55. int Port;       /* Port to talk to */
  56. char *String;   /* string to wait for */
  57. {int i, k;
  58.  char c;
  59.  int Code;
  60.  SioCrtWrite(LF);
  61.  /* flush leading LFs and CRs */
  62.  while(1)
  63.     {/* User BREAK ? */
  64.      if(BreakTest()) return(FALSE);
  65.      /* get next incoming character */
  66.      Code = GetChar(Port,2*SECONDS);
  67.         /* printf("{\n%x}",Code); */
  68.      if(Code==-1) break;
  69.      /* skip any leading CR or LF */
  70.      if(((char)Code!=LF)&&((char)Code!=CR))
  71.         {/* stuff character back & break out of loop */
  72.          SioUnGetc(Port,(char)Code);
  73.          break;
  74.         }
  75.      SioDelay(SECONDS/5);
  76.     }
  77.  /* wait for string */
  78.  for(i=0;i<strlen(String);i++)
  79.     {/* User BREAK ? */
  80.      if(BreakTest()) return(FALSE);
  81.      c = String[i];
  82.      /* wait up to 1 second for next character */
  83.      Code = GetChar(Port,SECONDS);
  84.         /* printf("(\n%x)",Code);*/
  85.      if(Code==-1) return(FALSE);
  86.      SioCrtWrite((char)Code);
  87.      if((char)Code != c)
  88.         {printf("\nExpecting %xH not %xH\n",c,Code);
  89.          return(FALSE);
  90.         }
  91.     } /* end for(i) */
  92.  /* another character ? */
  93.  Code = GetChar(Port,SECONDS);
  94.  if(Code>0) SioCrtWrite((char)Code);
  95.  return(TRUE);
  96. } /* end WaitFor */
  97.  
  98. int BreakTest()
  99. {/* User BREAK ? */
  100.  if(SioBrkKey())
  101.     {printf("User BREAK\n");
  102.      return(TRUE);
  103.     }
  104.  else return(FALSE);
  105. }